<?php

namespace app\bbxw\command;


use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Shared\Date;
use think\admin\Command;
use think\console\Input;
use think\console\Output;
/**
 * 订单导入
 * Class SmsNum
 * @package app\common\command
 */
class ImportOrder extends Command
{
    /**
     * 配置指令
     */
    protected function configure()
    {
        $this->setName('xbbxw:importOrder');
        $this->setDescription('importOrder');
    }

    protected function execute(Input $input, Output $output)
    {
        $queue_data = $this->queue->data;
        $path = $queue_data['path'];
        $this->setQueueProgress("正在解析数据,请稍等...", 0);
        // 指定要读取的Excel文件路径
        $spreadsheet = IOFactory::load($path);

        // 获取工作表
        $worksheet = $spreadsheet->getActiveSheet();

        // 初始化一个数组来存储符合条件的记录
        $processedData = [];
        // 遍历工作表中的每一行，从第二行开始
        $rowIterator = $worksheet->getRowIterator();

        // $rowIterator->current()->next(); // 跳过第一行
        // 遍历工作表中的每一行
        foreach ($rowIterator as $row) {
            // 获取当前行的行号
            $rowIndex = $row->getRowIndex();

            // 获取当前行的单元格
            $cellIterator = $row->getCellIterator();
            $cellIterator->setIterateOnlyExistingCells(FALSE); // 这个设置可以让循环包含所有单元格，即使它们没有值

            // 创建一个数组来存储这一行的数据
            $rowData = [];

            foreach ($cellIterator as $k=>$cell) {

                // 获取单元格的值
                $value = $cell->getValue();
                if($k=="A"){
                    // 处理包含`=ROW()-2`公式的单元格
                    if (is_string($value) && strpos($value, '=ROW()-2') !== false) {
                        $value = $rowIndex - 2;
                    }
                }
                if($k=="B"){
                    // 处理日期数据
                    if (is_numeric($value)) {
                        // 尝试将Excel日期序列号转换为标准日期格式
                        try {
                            $value = Date::excelToDateTimeObject($value)->format('Y-m-d');
                        } catch (\Exception $e) {
                            // 如果转换失败，保持原值
                        }
                    }
                }



                // 将处理后的值添加到行数据数组中
                $rowData[] = $value;
            }

            // 将处理后的行数据添加到结果数组中
            $processedData[] = $rowData;
        }
        // dump($processedData);
        $order_data = [];
        foreach ($processedData as $k=>$v){
            if($v[3]&&$k!=0){
                $order_data[]=$v;
            }
        }
        $total= count($order_data);
        $count = 0;
        //$data = $this->app->db->name("customer")->where(['name'=>"admin"])->value('id');dump($data);exit;
        $save_data=[];
        foreach ($order_data as $v){
            $name = $v[3];

            $uid = $this->app->db->name("customer")->where(['name'=>$name])->value('id');
            // dump($uid);
            if(empty($uid)){
                $uid = $this->app->db->name("customer")->insertGetId(['name'=>$name,'nickname'=>$v[4],'password'=>md5("123123")]);
            }
            //dump(111);
            $save_data[] = [
                'sort'=>$v[0],
                'date'=>$v[1],
                'group_number'=>$v[2],
                'customer_name'=>$v[3],
                'nickname'=>$v[4],
                'activity_gift'=>$v[5],
                'play_duration_h'=>$v[6],
                'order_quantity'=>$v[7],
                'power_source'=>$v[8],
                'receptionist'=>$v[9],
                'collector'=>$v[10],
                'business_amount'=>$v[11],
                'payment_method'=>$v[12],
                'non_business_income'=>$v[13],
                'non_business_expense'=>$v[14],
                'refund_dove_fee'=>$v[15],
                'prepaid_amount'=>$v[16],
                'remarks'=>$v[17],
                'uid'=>$uid
            ];
            $this->queue->message($total, ++$count, "插入【{$v[3]}】的数据完成");

        }

        $this->app->db->name("play_accompany")->insertAll($save_data);
        //$this->setQueueProgress("导入成功,请刷新页面", 100);
        //$this->setQueueSuccess("javascript:location.reload();");
        sysqueue("更新用户数据", "xbbxw:updataCustomer", $later = 10, [], $rscript = 1, $loops = 0);
        $this->setQueueSuccess("导入成功,请刷新页面");
    }
}